Amazon S3 Tables のプライベートVPCからのアクセスとポリシー管理によるアクセス制御を試してみた  #AWSreInvent

Amazon S3 Tables のプライベートVPCからのアクセスとポリシー管理によるアクセス制御を試してみた #AWSreInvent

Clock Icon2024.12.30

AWS事業本部コンサルティング部の石川です。S3 TablesにVPCエンドポイントがすでに提供されているのでプライベートアクセスができるのかを確認します。また、よくある機密データをVPCの外からアクセスできないようにするためのポリシー管理の具体例も合わせて解説します。

S3 Tables の VPC エンドポイント

S3 Tables の VPC エンドポイントは、インターフェース型のエンドポイントとして提供されています。そのため、エンドポイントにセキュリティーグループを指定してVPC内のアクセスコントロールも可能です。

今回の検証環境

今回の検証環境は、以下の階層のTable Bucketです。

cm-namespace-20241221
  └── cm_namespace
      └── lineorder

なお、Cloud Shell(us-east-1)からTable Bucketの一覧を参照しようとすると以下のように表示されます。

[cloudshell-user@ip-10-134-41-76 ~]$ aws s3tables list-table-buckets 
{
    "tableBuckets": [
        {
            "arn": "arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221",
            "name": "cm-namespace-20241221",
            "ownerAccountId": "123456789012",
            "createdAt": "2024-12-21T13:39:51.359829+00:00"
        }
    ]
}

Cloud Shell(us-east-1)からTable を参照しようとすると以下のように表示されます。

[cloudshell-user@ip-10-134-41-76 ~]$ aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221 
{
    "tables": [
        {
            "namespace": [
                "cm_namespace"
            ],
            "name": "lineorder",
            "type": "customer",
            "tableARN": "arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221/table/b2b01673-86df-498f-9290-e1c2cdcd31fc",
            "createdAt": "2024-12-21T13:42:23.211619+00:00",
            "modifiedAt": "2024-12-21T13:42:25.621779+00:00"
        }
    ]
}

S3 Tables のプライベートVPCをからのアクセスを試す

プライベートVPCの作成

以下のようにInternet GatewayのないプライベートなVPC(10.0.0.0/16)を作成しました。

s3-tables-privet-access-reinvent2024-1

プライベートVPCからコマンド実行がエラーになることを確認

このプライベートVPCに直接接続するためのCloud Shell(vpc-internal)を以下のように設定します。

s3-tables-privet-access-reinvent2024-2

なお、プライベートVPCに接続したCloud Shell(vpc-internal)からTable Bucketの一覧を参照しようとすると、エンドポイントに到達できず、以下のようにエラーになります。

[cloudshell-user@ip-10-0-138-39 ~]$ aws s3tables list-table-buckets 
Connect timeout on endpoint URL: "https://s3tables.us-east-1.amazonaws.com/buckets"

同様にプライベートVPCに接続したCloud Shell(vpc-internal)からTable を参照しようとすると、エンドポイントに到達できず、以下のようにエラーになります。

[cloudshell-user@ip-10-0-138-39 ~]$ aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221
Connect timeout on endpoint URL: "https://s3tables.us-east-1.amazonaws.com/tables/arn%3Aaws%3As3tables%3Aus-east-1%3A123456789012%3Abucket%2Fcm-namespace-20241221"

VPCエンドポイントを作成

まず、VPCエンドポイント用のセキュリティグループを作成します。

s3-tables-privet-access-reinvent2024-3

左のメニューから[PrivateLink and Lattice]の[Endpoints]を選択して、以下のようにS3 TablesのVPCエンドポイントを作成します。作成する際に上記のセキュリティグループを指定します。

s3-tables-privet-access-reinvent2024-4

プライベートVPCからコマンド実行が成功することを確認

プライベートVPCに接続したCloud Shell(vpc-internal)からTable Bucketの一覧が表示できました。

[cloudshell-user@ip-10-0-138-39 ~]$ aws s3tables list-table-buckets 
{
    "tableBuckets": [
        {
            "arn": "arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221",
            "name": "cm-namespace-20241221",
            "ownerAccountId": "123456789012",
            "createdAt": "2024-12-21T13:39:51.359829+00:00"
        }
    ]
}

同様にプライベートVPCに接続したCloud Shell(vpc-internal)からTable を参照できました。

[cloudshell-user@ip-10-0-138-39 ~]$ aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221
{
    "tables": [
        {
            "namespace": [
                "cm_namespace"
            ],
            "name": "lineorder",
            "type": "customer",
            "tableARN": "arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221/table/b2b01673-86df-498f-9290-e1c2cdcd31fc",
            "createdAt": "2024-12-21T13:42:23.211619+00:00",
            "modifiedAt": "2024-12-21T13:42:25.621779+00:00"
        }
    ]
}

プライベートVPC以外のアクセス制限を試す

アクセス制限するスコープ2種類あり、Table BucketレベルとTableレベルです。今回は、Table Bucketレベルで制限をかけたいと思います。制限をかけるにはTable Bucketに対してポリシーを設定します。ポリシーの設定方法についての詳細はこちらのブログをご覧ください。

https://dev.classmethod.jp/articles/amazon-s3-tables-policy-management-awsreinvent/

Table Bucketレベルにポリシーを設定します。ポリシーでは、S3 TablesのVPCエンドポイント(vpce-03267f6d1d9cffaad)からのs3tables関連のActionを拒否するように設定しています。

[cloudshell-user@ip-10-132-37-247 ~]$ aws s3tables put-table-bucket-policy \
>   --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221 \
>   --resource-policy '{
>   "Version": "2012-10-17",
>   "Id": "VPCEAccessPolicy",
>   "Statement": [
>     {
>       "Sid": "AccessFromSpecificVPCEOnly",
>       "Effect": "Deny",
>       "Principal": "*",
>       "Action": "s3tables:*",
>       "Resource": [
>         "*"
>       ],
>       "Condition": {
>         "StringNotEquals": {
>           "aws:SourceVpce": "vpce-03267f6d1d9cffaad"
>         }
>       }
>     }
>   ]
> }'

Cloud Shell(us-east-1)からTable を参照しようとするとエラーになります。

[cloudshell-user@ip-10-132-37-247 ~]$ aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221

An error occurred (AccessDeniedException) when calling the ListTables operation: User: arn:aws:sts::123456789012:assumed-role/cm-ishikawa.satoru/cm-ishikawa.satoru is not authorized to perform: s3tables:ListTables on resource: arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221 with an explicit deny

一方、プライベートVPCに接続したCloud Shell(vpc-internal)からTable を参照しようとすると、従来通りコマンド実行できます。

[cloudshell-user@ip-10-0-138-21 ~]$ aws s3tables list-tables --table-bucket-arn arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221
{
    "tables": [
        {
            "namespace": [
                "cm_namespace"
            ],
            "name": "lineorder",
            "type": "customer",
            "tableARN": "arn:aws:s3tables:us-east-1:123456789012:bucket/cm-namespace-20241221/table/b2b01673-86df-498f-9290-e1c2cdcd31fc",
            "createdAt": "2024-12-21T13:42:23.211619+00:00",
            "modifiedAt": "2024-12-21T13:42:25.621779+00:00"
        }
    ]
}

最後に

新しい S3 TablesのVPCエンドポイントを利用することで、インターネットを経由せずにS3 Tablesにアクセスできることが確認されました。また、Table Bucketレベルでのポリシー設定により、特定のVPCエンドポイントからのアクセスのみを許可し、それ以外からのアクセスを制限できることも実証されました。

これらの機能を組み合わせることで、S3 Tablesのセキュリティを向上させることが可能です。プライベートVPCからのアクセスとポリシーによるアクセス制御を適切に設定することで、機密データの保護やコンプライアンス要件への対応が容易になります。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.